from PIL import Image
import os

"""
图集转换器
将一个文件夹中的图片转换为一个图集图片。
"""


def create_atlas(image_folder, output_path):
    # 定义图集的大小和单个图片的大小
    atlas_size = (256, 256)
    tile_size = (16, 16)

    # 创建一个空白的图集图片
    atlas = Image.new('RGBA', atlas_size, (0, 0, 0, 0))

    # 获取文件夹中的所有图片文件
    image_files = [f for f in os.listdir(image_folder) if f.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]

    # 计算可以容纳的图片数量
    num_tiles_x = atlas_size[0] // tile_size[0]
    num_tiles_y = atlas_size[1] // tile_size[1]
    max_tiles = num_tiles_x * num_tiles_y

    if len(image_files) > max_tiles:
        print(f"警告: 文件夹中有 {len(image_files)} 张图片，但图集只能容纳 {max_tiles} 张图片。")

    # 从左下角开始排布图片
    for index, image_file in enumerate(image_files):
        if index >= max_tiles:
            break

        # 打开图片
        tile = Image.open(os.path.join(image_folder, image_file)).convert('RGBA')

        # 确保图片大小为16x16
        tile = tile.resize(tile_size, Image.LANCZOS)

        # 计算图片在图集中的位置
        x = (index % num_tiles_x) * tile_size[0]
        y = atlas_size[1] - (tile_size[1] * ((index // num_tiles_x) + 1))

        # 将图片粘贴到图集中
        atlas.paste(tile, (x, y), tile)

    # 保存图集
    atlas.save(output_path)
    print(f"图集已保存到 {output_path}")


if __name__ == '__main__':
    # 使用示例
    image_folder_ = 'Atlas_Test/Pieces'  # 替换为你的图片文件夹路径
    output_path_ = 'Atlas_Test/Atlas/atlas_output.png'  # 替换为你想要保存图集的路径
    create_atlas(image_folder_, output_path_)
